﻿using System;
using System.Linq;
using VO;
using System.Collections.Generic;

namespace DAL
{
    public class AtendenteDAL
    {

        #region Insert
        public void Insert(Atendente obj)
        {
            var contexto = new CallcenterEntities();
            var objC = new tbCCAtendente();
            objC = PopulaObjeto(obj, objC);
            contexto.AddTotbCCAtendente(objC);
            contexto.SaveChanges();
        }
        #endregion

        #region Update
        public void Update(Atendente obj)
        {
            var contexto = new CallcenterEntities();
            var atendente = (from tb in contexto.tbCCAtendente
                         where tb.idAtendente == obj.idAtendente
                         select tb).FirstOrDefault();
            PopulaObjeto(obj, atendente);
            contexto.SaveChanges();
        }
        #endregion

        #region UpdateStatus
        public void UpdateStatus(Atendente obj)
        {
            using (var contexto = new CallcenterEntities())
            {
                var atendente = (from tb in contexto.tbCCAtendente
                             where tb.idAtendente == obj.idAtendente
                             select tb).FirstOrDefault();
                atendente.fgAtivo = obj.fgAtivo;
                contexto.SaveChanges();
            }
        }
        #endregion

        #region Delete
        public void Delete(int idAtendente)
        {
            var contexto = new CallcenterEntities();
            var atendente = (from tb in contexto.tbCCAtendente
                         where tb.idAtendente == idAtendente
                         select tb).FirstOrDefault();
            contexto.DeleteObject(atendente);
            contexto.SaveChanges();
        }
        #endregion

        #region Select
        public IList<Atendente> Select(int idAtendente = 0)
        {
            var contexto = new CallcenterEntities();

            IQueryable<tbCCAtendente> atendente;

            atendente = (from tb in contexto.tbCCAtendente
                         where tb.fgAtivo==true && (tb.idAtendente == idAtendente || idAtendente == 0)
                     select tb);

            //Carrega lista
            var list = PopulaObjeto(atendente);

            return list;
        }
        #endregion

        #region SelectAll
        public IList<Atendente> SelectAll(int idAtendente = 0)
        {
            var contexto = new CallcenterEntities();

            IQueryable<tbCCAtendente> atendente;

            atendente = (from tb in contexto.tbCCAtendente
                         where (tb.idAtendente == idAtendente || idAtendente == 0)
                         select tb);

            //Carrega lista
            var list = PopulaObjeto(atendente);

            return list;
        }
        #endregion

        #region PopulaObjeto
        protected static tbCCAtendente PopulaObjeto(Atendente obj, tbCCAtendente tabela)
        {
            tabela.Nome = obj.NomeAtendente;
            tabela.fgAtivo = obj.fgAtivo;
            return tabela;
        }

        protected static IList<Atendente> PopulaObjeto(IQueryable<tbCCAtendente> reader)
        {
            IList<Atendente> list = new List<Atendente>();
            foreach (var obj in reader)
            {
                var newObj = new Atendente
                                 {
                                     idAtendente = obj.idAtendente,
                                     NomeAtendente = obj.Nome,
                                     fgAtivo = Convert.ToBoolean(obj.fgAtivo)
                                 };
                list.Add(newObj);
            }
            return list;
        }
        #endregion

    }
}